
    public class DeadlockDemo {

        // 定义两个资源
        private static final Object resource1 = new Object();
        private static final Object resource2 = new Object();

        public static void main(String[] args) {

            // 线程A，首先锁定resource1，然后尝试锁定resource2
            Thread threadA = new Thread(() -> {
                synchronized (resource1) {
                    System.out.println("我拿到对象一了，正在使用......");

                    try {
                        Thread.sleep(100); // 模拟一些操作所需的时间
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println("我还在用对象一，但是我想要调对象二");
                    synchronized (resource2) {
                        System.out.println("Thread A: Locked resource 2");
                    }
                }
            });

            // 线程B，首先锁定resource2，然后尝试锁定resource1
            Thread threadB = new Thread(() -> {
                synchronized (resource2) {
                    System.out.println("我拿到对象二了，正在使用......");

                    try {
                        Thread.sleep(100); // 模拟一些操作所需的时间
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println("我还在用对象二，但是我想要调对象一");
                    synchronized (resource1) {
                        System.out.println("Thread B: Locked resource 1");
                    }
                }
            });

            // 启动线程
            threadA.start();
            threadB.start();
        }
    }

